package com.haiertvbic.tvnow.widget;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;

import com.haiertvbic.tvnow.R;
import com.haiertvbic.tvnow.model.ProgramBean;
import com.haiertvbic.tvnow.network.EPGWeb;
import com.haiertvbic.tvnow.util.Constant;
import com.haiertvbic.tvnow.util.SLog;

public class PIPCache {
	protected static final String TAG = "PIPCache";
	private static Map<String, ArrayList<Bitmap>> pipCaches = new HashMap<String, ArrayList<Bitmap>>();
	private static Map<String, Boolean> isOne = new HashMap<String, Boolean>();
	private static Map<String, PIPUrlBean> screenCaches = new HashMap<String, PIPUrlBean>();
	static ArrayList<PIPUrlBean> bms = null;

	/**
	 * 传入频道号和上下文，返回频道截图的所求图片（4张） 如果包含这个路径且这个路径有值，返回null，让图片无法更新
	 * 
	 * @param cid
	 * @param context
	 * @return
	 */
	public static PIPUrlBean getScreen(String cid, final Context context) {

		PIPUrlBean bm_temp = null;
		String url = null;
		bms = EPGWeb.getChannelPIPXML(context, cid, 1);
		if (bms != null && bms.size() != 0) {
			url = bms.get(0).getPipUrl();
			if (screenCaches.containsKey(url) && screenCaches.get(url) != null) {
				// 如果包含这个路径且这个路径有值，返回null，让图片无法更新
				bm_temp = screenCaches.get(url);
				// screenCaches.get(url).get().recycle();
			} else {
				if (bms != null && bms.size() != 0
						&& bms.get(0).getBm() != null) {
					screenCaches.put(url, bms.get(0));
					bm_temp = bms.get(0);
				}
			}
		}

		return bm_temp;
	}

	public static ArrayList<Bitmap> getPips2(String cid, final Context context) {
		ArrayList<Bitmap> bms_temp = null;
		if (isOne.containsKey(cid) && isOne.get(cid)) {
			// 不是第一次去图片，则只取一张
			if (pipCaches.containsKey(cid) && pipCaches.get(cid) != null) {
				bms_temp = pipCaches.get(cid);
			}
			bms = EPGWeb.getChannelPIPXML(context, cid, 1);
			if (bms_temp != null && bms != null && bms.size() != 0) {
				bms_temp.add(0, bms.get(0).getBm());
				if (bms_temp.size() > 3) {
					bms_temp.remove(3);
				}
				pipCaches.clear();
				pipCaches.put(cid, bms_temp);
			} 
		}else {
			// 从screen池拿图
			if (getThreeBm(cid) != null) {
				bms_temp = getThreeBm(cid);
			} else {
//				bms_temp = getThreeBm2(cid, context);
				bms_temp = getThreeBm3(context);
			}
			if (bms_temp != null&&bms_temp.size()>0) {
				pipCaches.clear();
				pipCaches.put(cid, bms_temp);
				isOne.clear();
				isOne.put(cid, true);
			}
		}
		return bms_temp;
	}
/**
	 * 传入频道号和上下文，返回频道截图的所求图片（4张）
	 * 
	 * @param cid
	 * @param context
	 * @return
	 */
	public static ArrayList<Bitmap> getPips(String cid, final Context context) {
		ArrayList<Bitmap> bms_temp = null;
		if (isOne.containsKey(cid) && isOne.get(cid)) {
			// 不是第一次去图片，则只取一张
			bms = EPGWeb.getChannelPIPXML(context, cid, 1);
			if (pipCaches.containsKey(cid) && pipCaches.get(cid) != null) {
				bms_temp = pipCaches.get(cid);
			}
			if (bms_temp != null && bms != null && bms.size() != 0) {
				bms_temp.add(0, bms.get(0).getBm());
				if (bms_temp.size() > 3) {
					bms_temp.remove(3);
				}
				pipCaches.put(cid, bms_temp);
			} else {
				isOne.put(cid, false);
				SLog.i(TAG, "isOne在第二次为假");
				pipCaches.put(cid, null);
			}
		} else {
			// 从screen池拿图
			if (getThreeBm(cid) != null) {
				bms_temp = getThreeBm(cid);
			} else {
				bms_temp = getThreeBm2(cid, context);
			}
			if (bms_temp != null) {
				pipCaches.clear();
				pipCaches.put(cid, bms_temp);
			}
			if (pipCaches.containsKey(cid) && pipCaches.get(cid) != null) {
				isOne.clear();
				isOne.put(cid, true);
			} else {
				isOne.put(cid, false);
			}
		}
		if (pipCaches.get(cid) != null) {
			return pipCaches.get(cid);
		} else {
			return null;// 如过没有取到返回空
		}
	}

	private static ArrayList<Bitmap> getThreeBm(String cid) {
		ArrayList<Bitmap> bms_temp = null;
		Bitmap bm = null;
		HashMap<String, Bitmap> storage = Constant.STORAGE;
		if (storage.size() > 0 && storage.containsKey(cid)
				&& storage.get(cid) != null) {
			bm = storage.get(cid);
			int ii = 3;// 保持有三幅图
			if (bm != null) {
				bms_temp = new ArrayList<Bitmap>();
				for (int i = 0; i < ii; i++) {
					// 第一次同时填充三张同样的图，加快获取图片的时间
					bms_temp.add(bm);
				}
			}
			SLog.i(TAG, "频道号为" + cid);
		}
		
		return bms_temp;
	}
/**
 * 从screen得不到图时，网络获取数据
 * @param cid
 * @param context
 * @return
 */
	private static ArrayList<Bitmap> getThreeBm2(String cid,
			final Context context) {
		ArrayList<Bitmap> bms_temp;
		bms = EPGWeb.getChannelPIPXML(context, cid, 1);
		bms_temp = new ArrayList<Bitmap>();
		int ii = 3;// 保持有三幅图
		for (int i = 0; i < ii; i++) {
			// 第一次同时填充三张同样的图，加快获取图片的时间
			if (bms.size() > 0 && bms.get(0) != null
					&& bms.get(0).getBm() != null) {
				bms_temp.add(bms.get(0).getBm());
			}
		}
		return bms_temp;
	}

	/**
 * 从本地读图片
 * @param context
 * @return
 */
	private static ArrayList<Bitmap> getThreeBm3(Context context) {
		ArrayList<Bitmap> bms_temp = null;
		Bitmap bm = BitmapFactory.decodeResource(context.getResources(), R.drawable.tv_now);
		if (bm!=null) {
			int ii = 3;
			bms_temp = new ArrayList<Bitmap>();
			for (int i = 0; i < ii; i++) {
				// 第一次同时填充三张同样的图，加快获取图片的时间
				bms_temp.add(bm);
			}
		}
		return bms_temp;
	}

	// 计算进度条
	public static int getProgress(ProgramBean p) {
		int progress;
		long complexP = 1;// 已播放那个的长度
		long Plength = 1;// 节目总长
		if (p != null) {
			try {
				SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
				// 得到当前系统时间，并转换成long类型
				String str = df.format(new Date());

				// 得到节目播放的开始时间,并转换成long类型
				// String time = "23:14:00";
				String time = p.getPstime();
				long ptime = df.parse(time).getTime();
				SLog.d(TAG, "节目的开始时间long==" + ptime);
				// 得倒节目播放的结束时间
				// String ltime = "0:04:00";
				String ltime = p.getPftime();
				long pltime = df.parse(ltime).getTime();
				SLog.d(TAG, "节目的结束时间long==" + pltime);
				// 当前时间
				long current_time = df.parse(str).getTime();
				SLog.d(TAG, "当前时间==" + str);
				SLog.d(TAG, "=====当前时间long==" + current_time);
				// 一天的最后一点
				String theDayLast = "23:59:59";
				long theDayLast_long = df.parse(theDayLast).getTime();
				SLog.d(TAG, "=一天的最后一点==" + theDayLast_long);
				// 一天的开始
				String theDayFrist = "0:00:00";
				long theDayFrist_long = df.parse(theDayFrist).getTime();
				SLog.d(TAG, "==一天的开始点==" + theDayFrist_long);
				// 如果开始时间大于结束时间->节目的总长度
				if (ptime > pltime) {
					Plength = (theDayLast_long - ptime)
							+ (pltime - theDayFrist_long);
				} else {
					Plength = pltime - ptime;
				}
				// 如果当前时间小于节目的开始时间->已播放的节目长度
				if (ptime > current_time) {
					complexP = (theDayLast_long - ptime)
							+ (current_time - theDayFrist_long);
				} else {
					complexP = current_time - ptime;
				}
			} catch (ParseException e) {
				e.printStackTrace();
			}
		}
		progress = (int) ((complexP / (float) Plength) * 100);
		return progress;
	}
}
